home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / apps / 453 / edemo.c < prev    next >
C/C++ Source or Header  |  1990-02-16  |  3KB  |  109 lines

  1. /*
  2.  *
  3.  *  edemo.c - simple RTX event management example
  4.  *
  5.  *  Description:
  6.  *    The root process spawns a "pitcher" process at a lower
  7.  *    priority, which loops signaling events, based on
  8.  *    input from the console.
  9.  *
  10.  *    Each time the pitcher sends a signal, it is preempted
  11.  *    by root running at the higher priority.  Root receives
  12.  *    the event and toggles the appropriate event flag and
  13.  *    displays the status of the event flags on the screen.
  14.  *
  15.  *    For demonstration purposes, root waits for the signal
  16.  *    with a 30 second timeout, to show how that mechanism
  17.  *    works.
  18.  *
  19.  *    When all flags become enabled, the program terminates.
  20.  */
  21.  
  22. #include <stdio.h>
  23. #include <osbind.h>
  24. #include <rtxbind.h>
  25.  
  26. char *root;
  27.  
  28. pitcher()
  29. {
  30.     char c;
  31.     int event;
  32.  
  33.     /* loop forever */
  34.     for (;;) {
  35.         /* get a key */
  36.         c = Cnecin();
  37.         if (c < '0' || c > '7')
  38.             continue;
  39.         /* signal event 0 through 7 */
  40.         event = 1 << (c - '0');
  41.         e_signal(root, event);
  42.     }
  43. }
  44.  
  45.  
  46. main()
  47. {
  48.     struct config config;
  49.     int event;
  50.     int flags;
  51.  
  52.     config.max_proc = 4;
  53.     config.max_queues = 1;
  54.     config.max_msgs = 1;
  55.     config.create_call = 0;
  56.     config.delete_call = 0;
  57.     config.switch_call = 0;
  58.  
  59.     root = rtx_install(&config);
  60.  
  61.     /* spawn pitcher process */
  62.     p_create("pitcher", 200, 100, pitcher, 0, (int *)0, 4096L);
  63.  
  64.     printf("\033H\033J");
  65.     printf("+-----+-----+-----+-----+-----+-----+-----+-----+\n");
  66.     printf("|  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |\n");
  67.     printf("+-----+-----+-----+-----+-----+-----+-----+-----+\n");
  68.     printf("\n+-----+-----+-----+-----+-----+-----+-----+-----+\n");
  69.     printf("\n\n\n\nThis is a simple demo of RTX events.\n");
  70.     printf("One process waits for events from another.\n");
  71.     printf("\nPress a number from 0 to 7 to signal an event.\n");
  72.     printf("When all events have been signaled, this demo quits.\n");
  73.     printf("If you take longer than 30 seconds to press a key,\n");
  74.     printf("the receiver will timeout, which just shows how a\n");
  75.     printf("process can take appropriate action to handle it.\n");
  76.  
  77.     /* clear event mask */
  78.     flags = 0;
  79.  
  80.     do {
  81.         /* display event flags */
  82.         printf("\033H\n\n\n");
  83.         for (event = 128; event; event >>= 1) {
  84.             if (flags & event)
  85.                 printf("| ON  ");
  86.             else
  87.                 printf("| OFF ");
  88.         }
  89.         printf("|");
  90.  
  91.         /* wait for all events (mask=255) */
  92.         event = 255;
  93.         /* wait maximum of 30 seconds (6000 1/200 sec ticks) */
  94.         if (e_wait(&event, 0, 6000L)) {
  95.             printf("\007\033H\n\n\n\n\n\033K **** TIMEOUT ****");
  96.             p_pause(5000L);
  97.             printf("\007\033H\n\n\n\n\n\033K");
  98.         }
  99.         else {
  100.             /* toggle event flag */
  101.             flags ^= event;
  102.         }
  103.     } while (flags != 255);
  104.  
  105.     printf("\033H\033J");
  106.  
  107.     rtx_remove();
  108. }
  109.